package edu.northwestern.cbits.purple_robot_manager.tests;
import junit.framework.Assert;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import edu.northwestern.cbits.purple_robot_manager.R;
import edu.northwestern.cbits.purple_robot_manager.probes.Probe;
import edu.northwestern.cbits.purple_robot_manager.probes.ProbeManager;
import edu.northwestern.cbits.purple_robot_manager.probes.builtin.AccelerometerProbe;
import edu.northwestern.cbits.purple_robot_manager.probes.builtin.ContinuousProbe;
public class AccelerometerProbeTestCase extends RobotTestCase
{
public AccelerometerProbeTestCase(Context context, int priority)
{
super(context, priority);
}
@Override
public void test()
{
if (this.isSelected(this._context) == false)
return;
final ContentValues values = new ContentValues();
values.put("count", 0L);
values.put("start", Double.MAX_VALUE);
values.put("end", 0D);
BroadcastReceiver receiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
String name = intent.getStringExtra("PROBE");
if (AccelerometerProbe.NAME.equals(name))
{
double[] times = intent.getDoubleArrayExtra(ContinuousProbe.EVENT_TIMESTAMP);
long count = values.getAsLong("count");
double start = values.getAsDouble("start");
double end = values.getAsDouble("end");
for (double time : times)
{
if (time < start)
start = time;
if (time > end)
end = time;
}
values.put("count", count + times.length);
values.put("start", start);
values.put("end", end);
}
}
};
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Probe.PROBE_READING);
LocalBroadcastManager localManager = LocalBroadcastManager.getInstance(this._context);
localManager.registerReceiver(receiver, intentFilter);
try
{
this.broadcastUpdate("Enabling probe...");
for (Probe probe : ProbeManager.allProbes(this._context))
{
if (probe instanceof AccelerometerProbe)
{
probe.enable(this._context);
}
}
Thread.sleep(2000);
for (Probe probe : ProbeManager.allProbes(this._context))
{
if (probe instanceof AccelerometerProbe)
{
Assert.assertTrue("ATP0", probe.isEnabled(this._context));
AccelerometerProbe accel = (AccelerometerProbe) probe;
accel.setThreshold(0.0);
}
}
this.broadcastUpdate("Sleeping. 60 seconds remaining...", 0);
Thread.sleep(15000);
this.broadcastUpdate("Sleeping. 45 seconds remaining...", 0);
Thread.sleep(15000);
this.broadcastUpdate("Sleeping. 30 seconds remaining...", 0);
Thread.sleep(15000);
this.broadcastUpdate("Sleeping. 15 seconds remaining...", 0);
Thread.sleep(15000);
this.broadcastUpdate("Halting data collection...", 0);
localManager.unregisterReceiver(receiver);
Thread.sleep(2000);
}
catch (InterruptedException e)
{
Assert.fail("ATP1");
}
long count = values.getAsLong("count");
double start = values.getAsDouble("start");
double end = values.getAsDouble("end");
Assert.assertTrue("ATP2", count > 60);
Assert.assertTrue("ATP3", start > 0);
Assert.assertTrue("ATP3", end < System.currentTimeMillis());
Assert.assertTrue("ATP4", (end - start) > 45);
for (Probe probe : ProbeManager.allProbes(this._context))
{
if (probe instanceof AccelerometerProbe)
{
probe.disable(this._context);
}
}
}
@Override
public int estimatedMinutes()
{
return 1;
}
@Override
public String name(Context context)
{
return context.getString(R.string.name_accelerometer_probe_test);
}
}